iT邦幫忙

0

Python 遍歷樹狀字典 & 取值

  • 分享至 

  • xImage
  •  

有一個樹狀字典,結構如下

A = {
  'LINE': 12561,
  'CLASS': 'TYPEDEF',
  'TYPE': 'STRUCT',
  'OFFSET': nan,
  'SIZE': 12047,
  'Member': {
    'A1': {'LINE': 12562,
           'CLASS': 'MEMBER',
           'TYPE': 'U_LONG',
           'OFFSET': 0,
           'SIZE': 4},
    'A2': {'LINE': 12566,
           'CLASS': 'MEMBER',
           'TYPE': 'STRUCT',
           'OFFSET': 12,
           'SIZE': 387,
           'Member': {
             'A2_1': {
               'LINE': 12516,
               'CLASS': 'MEMBER',
               'TYPE': 'ARRAY',
               'OFFSET': 0,
               'SIZE': 128,
               'Member': {
                 'A2_1_1': {
                   'LINE': 13320,
                   'CLASS': 'TYPEDEF',
                   'TYPE': 'UNION',
                   'OFFSET': 0,
                   'SIZE': 2},
                 'A2_1_2': {
                   'LINE': 13320,
                   'CLASS': 'TYPEDEF',
                   'TYPE': 'UNION',
                   'OFFSET': 2,
                   'SIZE': 2}}}}}}}

每個key裡面固定會有'LINE'、'CLASS'、'TYPE'、'OFFSET'、'SIZE'五個key及對應的value,若有'Member'的話代表還有有下一層
目標為遍歷所有Member裡的key,取出所有的OFFSET值並print出來,結果希望如下

A : 0
	A1 : 0
	A2 : 12
		 A2_1 : 0
                A2_1_1 : 0
                A2_1_2 : 2

其實就是基本的樹狀遍歷,只是寫成遞迴就很容易搞混,因此寫下來記錄一下

def getList(Dict,aboveName = None,layer = 0):

    for i in range(layer):
        print("\t",end='')
    print(aboveName,":",Dict['OFFSET'])
  
    for k in Dict.keys():
        if k =='Member':
            for kk in Dict['Member'].keys():
                getList(Dict = Dict['Member'][kk],
                        aboveName = kk,
                        layer = layer + 1)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言